package com.ruifu.doc.service;


import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.common.vo.PageResultVO;
import com.ruifu.doc.dto.docver.DmDocVerInsertDTO;
import com.ruifu.doc.dto.docver.DmDocVerPLInsertDTO;
import com.ruifu.doc.dto.docver.DmDocVerQueryDTO;
import com.ruifu.doc.dto.docver.DmDocVerUpdateDTO;
import com.ruifu.doc.vo.docver.DmDocVerVO;
import java.util.List;

public interface DmDocVerService {
    /**
     * 联合查询
     * @param pageNum
     * @param pageSize
     * @param dmDocVerQueryDTO
     * @param cloudUser
     * @return
     */
    PageResultVO findByQuery(int pageNum, int pageSize, DmDocVerQueryDTO dmDocVerQueryDTO, CloudUser cloudUser);

    /**
     * 新建
     * @param dmDocVerInsertDTO
     * @param cloudUser
     * @throws Exception
     */
    void insert(DmDocVerInsertDTO dmDocVerInsertDTO, CloudUser cloudUser) throws Exception;

    /**
     * 根据id删除
     * @param dvDvId
     * @param cloudUser
     * @throws Exception
     */
    void deleteByDvDvId(Long dvDvId, CloudUser cloudUser) throws Exception;

    /**
     * 修改
     * @param dmDocVerUpdateDTO
     * @param cloudUser
     * @throws Exception
     */
    void update(DmDocVerUpdateDTO dmDocVerUpdateDTO, CloudUser cloudUser) throws Exception;

    /**
     * 转交所有权
     *
     * @param dvDvId
     * @param dvOwner
     * @param cloudUser
     */
    void updateOwnership(Long dvDvId, Integer dvOwner, CloudUser cloudUser);

    /**
     * 批量删除
     * @param dvDvIdList
     * @param cloudUser
     * @throws Exception
     */
    void delete(List<Long> dvDvIdList, CloudUser cloudUser) throws Exception;

    /**
     * 另存为
     * @param dvDvId
     * @param dmDocName
     * @param dmDocCode
     * @param cloudUser
     * @throws Exception
     */
    void insertSaveAs(Long dvDvId, String dmDocName, String dmDocCode, CloudUser cloudUser) throws Exception;

    /**
     * 文档详情
     * @param dvDvId
     * @return
     */
    DmDocVerVO findById(Long dvDvId,CloudUser cloudUser);

    /**
     * 版本升级
     *
     * @param dvDvId
     * @param cloudUser
     * @return
     */
    void newVersion(Long dvDvId, CloudUser cloudUser) throws Exception;

    /**
     * 批量录入
     * @param dmDocVerPLInsertDTOList
     * @param cloudUser
     * @throws Exception
     */
    void plInsert(List<DmDocVerPLInsertDTO> dmDocVerPLInsertDTOList, CloudUser cloudUser) throws Exception;

    /**
     * 联合查询不分页
     * @param dmDocVerQueryDTO
     * @param cloudUser
     * @return
     */
    List<DmDocVerVO> findAll(DmDocVerQueryDTO dmDocVerQueryDTO, CloudUser cloudUser);

    /**
     * 文档权限控制
     * @param cloudUser
     * @param dvDvId 文档版本id
     * @return
     */
    String findPermissionByUserIdAndPtId(CloudUser cloudUser, Long dvDvId);

    /**
     *文档修改流程权限是否满足
     * @param currentStep  当前节点步骤名称
     * @param userId       当前用户id
     * @param nodeUserIdList     节点办理人字符串
     * @param currentStepString  指定的节点名称
     * @return
     */
    Boolean isMeet(String currentStep, Integer userId, String nodeUserIdList, String currentStepString);

    /**
     * 当前登录用户是否在流程办理人中
     * @param userId 当前用户id
     * @param nodeUserIdList 节点办理人字符串
     * @return
     */
    Boolean isNodeHandlerUser(Integer userId, String nodeUserIdList);

    List<String> findPermissDocList(CloudUser cloudUser, Long[] dvDvIdArr);
}
